home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / WorldScript.h < prev   
C/C++ Source or Header  |  1996-05-01  |  9KB  |  327 lines

  1. /*
  2.      File:        WorldScript.h
  3.  
  4.      Contains:    WorldScript I Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __WORLDSCRIPT__
  19. #define __WORLDSCRIPT__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __TRAPS__
  25. #include <Traps.h>
  26. #endif
  27. #ifndef __QUICKDRAWTEXT__
  28. #include <QuickdrawText.h>
  29. #endif
  30.  
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34.  
  35. #if PRAGMA_IMPORT_SUPPORTED
  36. #pragma import on
  37. #endif
  38.  
  39. #if PRAGMA_ALIGN_SUPPORTED
  40. #pragma options align=mac68k
  41. #endif
  42.  
  43. typedef UInt16 WSIOffset;
  44. typedef UInt8 WSIByteCount;
  45. typedef UInt8 WSIByteIndex;
  46. /* offset from start of sub-table to row in state table */
  47. typedef UInt16 WSIStateOffset;
  48. typedef UInt32 WSITableOffset;
  49. typedef UInt16 WSISubtableOffset;
  50. typedef UInt16 WSIGlyphcode;
  51. typedef UInt32 WSITableIdentifiers;
  52.  
  53. enum {
  54.     kScriptSettingsTag            = 'info',
  55.     kMetamorphosisTag            = 'mort',
  56.     kGlyphExpansionTag            = 'g2g#',
  57.     kPropertiesTag                = 'prop',
  58.     kJustificationTag            = 'kash',
  59.     kCharToGlyphTag                = 'cmap',
  60.     kGlyphToCharTag                = 'pamc',
  61.     kFindScriptRunTag            = 'fstb'
  62. };
  63.  
  64. /****             L O O K U P    T A B L E    T Y P E S        ****/
  65.  
  66. enum {
  67.     WSILookupSimpleArray        = 0,                            /* a simple array indexed by glyph code */
  68.     WSILookupSegmentSingle        = 2,                            /* segment mapping to single value */
  69.     WSILookupSegmentArray        = 4,                            /* segment mapping to lookup array */
  70.     WSILookupSingleTable        = 6,                            /* sorted list of glyph, value pairs */
  71.     WSILookupTrimmedArray        = 8                                /* a simple trimmed array indexed by glyph code */
  72. };
  73.  
  74. typedef unsigned short WSILookupTableFormat;
  75. typedef unsigned short WSILookupValue;
  76. /* An offset from the beginning of the lookup table */
  77. typedef unsigned short WSILookupOffset;
  78. /*    FORMAT SPECIFIC DEFINITIONS */
  79. /*
  80.         lookupSimpleArray:
  81.         
  82.         This is a simple array which maps all glyphs in the font
  83.         to lookup values.
  84. */
  85. struct WSILookupArrayHeader {
  86.     WSILookupValue                     lookupValues[1];            /* The array of values indexed by glyph code */
  87. };
  88. typedef struct WSILookupArrayHeader WSILookupArrayHeader;
  89.  
  90. /*
  91.         lookupTrimmedArray:
  92.         
  93.         This is a single trimmed array which maps a single range
  94.         of glyhs in the font to lookup values.
  95. */
  96. struct WSILookupTrimmedArrayHeader {
  97.     WSIGlyphcode                     firstGlyph;
  98.     WSIGlyphcode                     limitGlyph;
  99.     WSILookupValue                     valueArray[1];
  100. };
  101. typedef struct WSILookupTrimmedArrayHeader WSILookupTrimmedArrayHeader;
  102.  
  103. /* The format specific part of the subtable header */
  104. union WSILookupFormatSpecificHeader {
  105.     WSILookupArrayHeader             lookupArray;
  106.     WSILookupTrimmedArrayHeader     trimmedArray;
  107. };
  108. typedef union WSILookupFormatSpecificHeader WSILookupFormatSpecificHeader;
  109.  
  110. /* The overall subtable header */
  111. struct WSILookupTableHeader {
  112.     WSILookupTableFormat             format;                        /* table format */
  113.     WSILookupFormatSpecificHeader     fsHeader;                    /* format specific header */
  114. };
  115. typedef struct WSILookupTableHeader WSILookupTableHeader;
  116.  
  117. /****        G L Y P H    E X P A N S I O N    ****/
  118.  
  119. enum {
  120.                                                                 /* fixed 1.0 */
  121.     kCurrentGlyphExpansionVersion = 0x00010000
  122. };
  123.  
  124. typedef unsigned short GlyphExpansionFormats;
  125.  
  126. enum {
  127.     GlyphExpansionLookupFormat    = 1,
  128.     GlyphExpansionContextualFormat = 2
  129. };
  130.  
  131. struct ExpandedGlyphCluster {
  132.     WSIByteCount                     numGlyphs;
  133.     WSIByteIndex                     bestGlyph;
  134.     WSIGlyphcode                     glyphs[1];
  135. };
  136. typedef struct ExpandedGlyphCluster ExpandedGlyphCluster;
  137.  
  138. struct ExpandedGlyphOffset {
  139.     WSIGlyphcode                     glyph;
  140.     WSIOffset                         offset;                        /* offset to ExpandedGlyphCluster */
  141. };
  142. typedef struct ExpandedGlyphOffset ExpandedGlyphOffset;
  143.  
  144. struct GlyphExpansionStateTable {
  145.     WSISubtableOffset                 stateTableOffset;
  146.     WSISubtableOffset                 classTableOffset;
  147.     WSISubtableOffset                 actionTableOffset;            /* state, class and actions tables follow here... */
  148. };
  149. typedef struct GlyphExpansionStateTable GlyphExpansionStateTable;
  150.  
  151. struct GlyphExpansionTable {
  152.     Fixed                             version;
  153.     short                             format;
  154.     short                             expansionNumer;
  155.     short                             expansionDenom;                /* num/denom ratio for expansion <2> */
  156.  
  157.     union {
  158.         GlyphExpansionStateTable         stateTable;
  159.         WSILookupTableHeader             lookup;                    /* expanded glyph clusters follow here... */
  160.     }                                 table;
  161. };
  162. typedef struct GlyphExpansionTable GlyphExpansionTable;
  163.  
  164. /* Glyph-to-Character constants and types  */
  165.  
  166. enum {
  167.     kCurrentGlyphToCharVersion    = 0x00010100
  168. };
  169.  
  170. typedef unsigned short GlyphToCharLookupFormats;
  171.  
  172. enum {
  173.     kGlyphToCharLookup8Format    = 1,
  174.     kGlyphToCharLookup16Format    = 2,
  175.     kGlyphToCharLookup32Format    = 3
  176. };
  177.  
  178. typedef UInt8 GlyphToCharFontIndex;
  179. typedef UInt8 QDGlyphcode;
  180. struct GlyphToCharActionTable {
  181.     WSISubtableOffset                 fontNameOffset;                /* offset relative to this table */
  182.     WSILookupTableHeader             actions;                    /* only support lookupSimpleArray format for now */
  183. };
  184. typedef struct GlyphToCharActionTable GlyphToCharActionTable;
  185.  
  186. struct GlyphToCharActionHeader {
  187.     short                             numTables;                    /* 0..n */
  188.     WSISubtableOffset                 offsets[1];                    /* offsets from start of action table header */
  189. };
  190. typedef struct GlyphToCharActionHeader GlyphToCharActionHeader;
  191.  
  192. struct GlyphToCharHeader {
  193.     Fixed                             version;
  194.  
  195.     WSISubtableOffset                 actionOffset;                /* offset to GlyphToCharActionHeader */
  196.  
  197.     short                             format;                        /* size of font mask */
  198.     WSILookupTableHeader             mappingTable;
  199. };
  200. typedef struct GlyphToCharHeader GlyphToCharHeader;
  201.  
  202. /*
  203.  JUSTIFICATION TYPES
  204.     WorldScript supports justification of text using insertion. The justification
  205.     table specifies a insertion string to insert between 2 specified glyphs.
  206.     Each combination of inter-glyph boundary can be assigned a justification priority,
  207.     the higher the priority the more justification strings inserted at that position.
  208.     
  209.     The priorities for each inter-glyph boundary are specified by the justification table's
  210.     state table.
  211.     
  212.     Special handling is done for scripts which use spaces to justify, because the width of 
  213.     a space varies depending on the setting of SpaceExtra. This is why the number of spaces
  214.     per inserting string is specified in the justification table.
  215.  
  216. */
  217.  
  218. enum {
  219.                                                                 /* 1.0 not supported */
  220.     kCurrentJustificationVersion = 0x0200
  221. };
  222.  
  223.  
  224. enum {
  225.     kJustificationStateTableFormat = 1
  226. };
  227.  
  228.  
  229. enum {
  230.                                                                 /* WSI's internal limitation <12> */
  231.     kMaxJustificationStringLength = 13
  232. };
  233.  
  234. typedef UInt8 WSIJustificationPriority;
  235.  
  236. enum {
  237.     WSIJustificationSetMarkMask    = 0x80
  238. };
  239.  
  240. struct WSIJustificationStateEntry {
  241.     WSIJustificationPriority         markPriority;                /* non-zero priorities means insertion */
  242.     WSIJustificationPriority         priority;
  243.     WSIStateOffset                     newState;
  244. };
  245. typedef struct WSIJustificationStateEntry WSIJustificationStateEntry;
  246.  
  247. typedef unsigned short WSIJustificationClasses;
  248.  
  249. enum {
  250.     wsiJustEndOfLineClass        = 0,
  251.     wsiJustEndOfRunClass        = 1,
  252.     wsiJustDeletedGlyphClass    = 2,
  253.     wsiJustUserDefinedClass        = 3
  254. };
  255.  
  256. typedef unsigned short WSIJustificationStates;
  257.  
  258. enum {
  259.     wsiStartOfLineState            = 0,                            /* pre-defined states */
  260.     wsiStartOfRunState            = 1,
  261.     wsiUserDefinedState            = 2
  262. };
  263.  
  264. /* pre-multiplied: class# * sizeof(WSIJustificationStateEntry) */
  265. typedef UInt8 WSIJustificationClassOffset;
  266. struct WSIJustificationStateTable {
  267.     short                             maxPriorities;
  268.     unsigned short                     rowWidth;                    /* width of a state table row in bytes */
  269.     short                             classTableOffset;
  270.     short                             stateTableOffset;
  271. };
  272. typedef struct WSIJustificationStateTable WSIJustificationStateTable;
  273.  
  274. /*
  275.             Last two fields of above structure - someday?
  276.             WSIJustificationClassOffset    classes[up to 64 classes supported];
  277.             WSIJustificationStateEntry    states[up to your heart's desire];
  278. */
  279. struct WSIJustificationHeader {
  280.     short                             version;
  281.     short                             format;
  282.  
  283.     Point                             scaling;                    /* numer/denom scaling of priority weights <7> */
  284.  
  285.     unsigned short                     spacesPerInsertion;            /* # of $20 chars in justification insertion string <12> */
  286.     unsigned short                     justStringOffset;            /* offset to justification string */
  287.  
  288.  
  289.     WSIJustificationStateTable         stateTable;                    /* long-aligned boundary aligned w/ spacesPerInsertion field - justification string follows */
  290. };
  291. typedef struct WSIJustificationHeader WSIJustificationHeader;
  292.  
  293. /* Line Layout's Property table version <11> */
  294.  
  295. enum {
  296.                                                                 /* v1.0 */
  297.     currentPropsTableVersion    = 0x00010000
  298. };
  299.  
  300.  
  301. enum {
  302.                                                                 /* ??? is this right */
  303.     kCharToGlyphCurrentVersion    = 100
  304. };
  305.  
  306. /* pass as priorityWeight to JustifyWSILayout to use script's current just setting */
  307.  
  308. enum {
  309.     kScriptsDefaultJustWeight    = -1
  310. };
  311.  
  312.  
  313. #if PRAGMA_ALIGN_SUPPORTED
  314. #pragma options align=reset
  315. #endif
  316.  
  317. #if PRAGMA_IMPORT_SUPPORTED
  318. #pragma import off
  319. #endif
  320.  
  321. #ifdef __cplusplus
  322. }
  323. #endif
  324.  
  325. #endif /* __WORLDSCRIPT__ */
  326.  
  327.